简易聊天软件开发(python+socket)

您所在的位置:网站首页 聊天软件 源代码 简易聊天软件开发(python+socket)

简易聊天软件开发(python+socket)

2024-07-10 22:02| 来源: 网络整理| 查看: 265

python软件开发一个聊天软件,了解一下,最初的聊天实现方式,本次用到socket编程,及多线程技术,测试开发入门小玩意,没事玩一玩,还是可以的。

话不多说,直接上代码:

一、1V1聊天代码实现:

创建两个文件,sock_server.py和sock_client.py文件:

1.1 sock_server.py import socket # 创建socket对象 sk=socket.socket() # 连接服务器ip及商品 sk.connect(('127.0.0.1',9999)) # 向服务器发送信息,需要先转换格式【encode('utf-8'))】,才能被服务器识别 sen_data=input('输入要发送的内容:') sk.sendall(sen_data.encode('utf-8')) # 接收来自服务器的信息,接收到信息并非是字节,所以需要解码才能被正常识别 ser_data=sk.recv(1024).decode('utf-8') print('接收到的服务端数据:',ser_data) # 断开连接 sk.close() 1.2 sock_client.py import socket # 定义服务器ip、端口 ip_ad=('127.0.0.1',9999) # 创建socket对象 sk=socket.socket() # 绑定ip端口 sk.bind(ip_ad) # 开启监听 sk.listen() print('服务器已经开启......') # 等待接收客户端信息 conn,addr=sk.accept() print('客户端地址:',addr) # 等待接收客户端信息,接收到信息并非是字节格式,所以需要解码才能被正常识别【decode('utf-8')】 cli_data=conn.recv(1024).decode('utf-8') print('接收到的客户端数据:',cli_data) # 发送信息给客户端,发送的信息非字节格式,需要先转换格式【encode('utf-8'))】 sen_data=input('输入要发送的内容:') conn.sendall(sen_data.encode('utf-8')) # 断开连接 sk.close() 1.3 运行 1.3.1 初始状态

分别运行服务器和客户端代码: 服务器 在这里插入图片描述 客户端 在这里插入图片描述

1.3.2 客户端发送消息,服务器接收消息

客户端 在这里插入图片描述 服务器 在这里插入图片描述

1.3.3 服务器回复消息,客户端接收消息

服务器 在这里插入图片描述 客户端 在这里插入图片描述 一对一方式,发送一条消息,回复一条消息。enter键结束一条消息发送

二、多用户跟服务器聊天

分别创建三个文件:server.py、A_client.py、B_client.py

2.1 server.py import socketserver # 1. 继承一个类 class sqServer(socketserver.BaseRequestHandler): def handle(self) -> None: print('小可爱们,聊天服务器已上线......') while True: # 接收客户端数据 client_data=self.request.recv(1024) print(client_data.decode('utf-8')) # 发送消息给客户端 send_data=input('请输入内容:') self.request.sendall(send_data.encode('utf-8')) self.request.close() # 2. 创建服务 server=socketserver.ThreadingTCPServer(('127.0.0.1',7777),sqServer) # 3. 保持在线 server.serve_forever() 2.2 A_client.py import socket # 创建socket对象 sk=socket.socket() # 连接服务器ip及商品 sk.connect(('127.0.0.1',7777)) while True: # 向服务器发送信息,需要先转换格式【encode('utf-8'))】,才能被服务器识别 send_data='A: '+input('输入要发送的内容:') sk.sendall(send_data.encode('utf-8')) # 接收来自服务器的信息,接收到信息并非是字节,所以需要解码才能被正常识别 server_data=sk.recv(1024).decode('utf-8') print('接收到的服务端数据:',server_data) # 断开连接 sk.close() 2.3 B_client.py import socket # 创建socket对象 sk=socket.socket() # 连接服务器ip及商品 sk.connect(('127.0.0.1',7777)) while True: # 向服务器发送信息,需要先转换格式【encode('utf-8'))】,才能被服务器识别 send_data='B: '+input('输入要发送的内容:') sk.sendall(send_data.encode('utf-8')) # 接收来自服务器的信息,接收到信息并非是字节,所以需要解码才能被正常识别 server_data=sk.recv(1024).decode('utf-8') print('接收到的服务端数据:',server_data) # 断开连接 sk.close() 2.4 运行

分别运行三个文件,并且实现交互,查看最后结果:

2.4.1 初始状态

服务器: 在这里插入图片描述 A用户: 在这里插入图片描述 B用户: 在这里插入图片描述

2.4.2 A和B分别向服务器发送消息,服务器接收到消息

A用户 在这里插入图片描述 B用户: 在这里插入图片描述 服务器接收: 在这里插入图片描述

2.4.3 服务器回复消息,A和B收到消息

服务器回复 在这里插入图片描述 A收到的服务器消息 在这里插入图片描述 B收到的服务器消息 在这里插入图片描述

可以看到,多用户对服务器发起聊天,服务器会根据用户发送的时间先后,进行优先回复,并不需要指定A或B。而且,服务器回复完后,可以继续发送消息,此时,如果A先回复,则服务器刚发送的消息立即回复A。

可能有点绕,练下手,就知道了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3